// stores/auth.ts
import { http } from '@/utils/http';
import { defineStore } from 'pinia';
import type User from '@/types/user';  // 确保导入正确的类型

export const useAuthStore = defineStore('auth', {
    state: () => ({
        isLoggedIn: false,
        user: null as User | null,  // 你可以根据需要定义用户对象的类型
    }),
    actions: {
        async login(username: string, password: string) {
            try {
                // 发送登录请求
                const res = await http<{ token: string, user: User }>({
                    method: 'POST',  // 使用 POST 方法
                    url: '/login',  // 假设登录 API 的 URL 是 /api/login
                    data: {
                        username,
                        password
                    }
                });
                //console.log('后端返回数据token:' + res.data.token)
                //console.log('后端返回数据user:' + res.data.user)

                // 登录成功或失败，更新状态
                if (res.data != null) {
                    this.isLoggedIn = true;
                    uni.showToast({ title: '登陆成功', icon: 'none' });
                    uni.setStorageSync('token', res.data.token);

                } else {
                    // 登录失败,清除本地存储
                    uni.removeStorageSync('rememberedUsername');
                    uni.removeStorageSync('rememberedPassword');
                    uni.removeStorageSync('token');
                    // 登录失败，显示错误信息
                    uni.showToast({ title: res.msg, icon: 'none' });
                    this.isLoggedIn = false;
                }
                this.user = res.data.user; // 假设后端返回的用户信息是 res.data

                //return this.isLoggedIn;  // 返回 true 表示登录成功

                // 返回包含登录状态和用户信息的对象
                return { isLoggedIn: this.isLoggedIn, user: this.user };
            } catch (error) {
                console.error('登录失败:', error);
                // 这里可以处理错误，比如显示错误提示
                throw new Error('登录失败，请检查用户名和密码');  // 抛出错误以便在调用处处理
            }
        },
        logout() {
            this.isLoggedIn = false;
            this.user = null;

            // 清除本地存储
            uni.removeStorageSync('token');
            uni.removeStorageSync('rememberedUsername');
            uni.removeStorageSync('rememberedPassword');
        },
    },
});